package ThreadDemo;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 34255
 * Date: 2024-10-29
 * Time: 15:40
 */
//使用Callable接口创建线程
public class Demo21 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建Callable匿名内部类，重写call方法，也就是未来线程执行的任务，并传递泛型参数，作为方法的返回值
        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                return -1;
            }
        };

        //由于Thread类没有提供关于Callable的构造方法,所以需要先创建一个FutureTask类来存储该任务
        //之后线程执行完任务会将返回值传递给FutureTask,之后通过get方法获取返回值
        FutureTask<Integer> task = new FutureTask<>(callable);
        Thread thread = new Thread(task);
        thread.start();
        //这边会进行阻塞等待，等待到call()方法执行完成返回返回值
        System.out.println(task.get());
    }
}
